package br.com.peri.service.bean;

import java.util.List;

import javax.ejb.Stateless;
import javax.inject.Inject;

import org.apache.commons.lang3.StringUtils;

import br.com.peri.Pessoa;
import br.com.peri.exception.PeriWsException;
import br.com.peri.repository.PessoaRepository;
import br.com.peri.service.PessoaService;
import br.com.peri.validator.PeriValidator;

@Stateless
public class PessoaServiceBean implements PessoaService {

	private static final long serialVersionUID = 1L;
	@Inject
	private PessoaRepository pessoaRepository;

	@Override
	public Pessoa salvarPessoa(Pessoa pessoa) throws PeriWsException {
		validarPessoa(pessoa);
		return pessoaRepository.salvar(pessoa);
	}

	@Override
	public Pessoa atualizarPessoa(Pessoa pessoa) throws PeriWsException {
		validarPessoa(pessoa);
		return pessoaRepository.atualizar(pessoa);
	}

	private void validarPessoa(final Pessoa pessoa) throws PeriWsException {
		if (pessoa == null) {
			throw new PeriWsException("br.com.peri.pessoa.notNull");
		}
		List<String> msgs = PeriValidator.getInstance()
				.getMessagesValidation(pessoa);
		PeriWsException periException = null;
		if (!msgs.isEmpty()) {
			periException = new PeriWsException(msgs);
		}
		if (StringUtils.isBlank(pessoa.getCpf())
				|| StringUtils.isBlank(pessoa.getCnpj())) {
			
			if(periException == null){
				periException = new PeriWsException();
			}
			
			periException
					.addMessage("br.com.peri.pessoa.cpf_cnpj.not_blank");
		}
		
		if(periException != null)
			throw periException;
	}

	@Override
	public void excluirPessoa(Long idPessoa) throws PeriWsException {
		pessoaRepository.excluir(Pessoa.class, idPessoa);
	}

	@Override
	public Pessoa getPessoaPorCpfCnpj(String cpfCnpj) {
		return pessoaRepository.getPessoaPorCpfCnpj(cpfCnpj);
	}

	@Override
	public Pessoa getPessoaPorId(Long id) {
		return pessoaRepository.pesquisarPorId(Pessoa.class, id);
	}

	@Override
	public List<Pessoa> listarTodasPessoas() {
		return pessoaRepository.listarTodos(Pessoa.class);
	}

	@Override
	public List<Pessoa> listarPessoas(String nome, String cpf, String cnpj) {
		return pessoaRepository.listarPessos(nome, cpf, cnpj);
	}

}
